Given a string s
and an array of strings words
, return the number ofwords[i]
that is a subsequence ofs
.
A subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.
- For example,
"ace"
is a subsequence of"abcde"
.
Input: s = "abcde", words = ["a","bb","acd","ace"] Output: 3 Explanation: There are three strings in words that are a subsequence of s: "a", "acd", "ace".
Input: s = "dsahjpjauf", words = ["ahjpjau","ja","ahbwzgqnuk","tnmlanowax"] Output: 2
1 <= s.length <= 5 * 104
1 <= words.length <= 5000
1 <= words[i].length <= 50
s
andwords[i]
consist of only lowercase English letters.
implSolution{pubfnnum_matching_subseq(s:String,words:Vec<String>) -> i32{letmut indices = vec![vec![];26];letmut ret = 0;for(i, c)in s.bytes().enumerate(){ indices[(c - b'a')asusize].push(i);}for word in&words {letmut i = 0;letmut flag = true;for c in word.bytes(){match indices[(c - b'a')asusize].binary_search(&i){Err(j)if j == indices[(c - b'a')asusize].len() => { flag = false;break;}Ok(j) | Err(j) => i = indices[(c - b'a')asusize][j] + 1,}} ret += flag asi32;} ret }}